package com.project.imageinterference.utils;

import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * @Description 将MultipartFile转换为三维数组
 * @Author cwhao
 * @Date 2025/2/6 下午2:04
 */
public class ImageToArrayConverter {

    /**
     * 将MultipartFile转换为三维数组
     *
     * @param file 上传的图片文件
     * @return 三维数组，格式为 [height][width][channels]
     * @throws IOException 如果图片读取失败
     */
    public static int[][][] convertTo3DArray(MultipartFile file) throws IOException {
        BufferedImage image = ImageIO.read(file.getInputStream());
        if (image == null) {
            throw new IOException("无法读取图片文件");
        }

        int width = image.getWidth();
        int height = image.getHeight();
        int[][][] pixelData = new int[height][width][3]; // 3表示RGB通道

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                int rgb = image.getRGB(x, y);
                pixelData[y][x][0] = (rgb >> 16) & 0xFF; // 红色通道
                pixelData[y][x][1] = (rgb >> 8) & 0xFF;  // 绿色通道
                pixelData[y][x][2] = rgb & 0xFF;         // 蓝色通道
            }
        }

        return pixelData;
    }
}
